package com.ruoyi.common.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

public class JWTUtils {
    private static final String JWTSecret="NB666";

    /**
     * 创建JWT
     * @return
     */
    public static String createJWT(String userId){


        Date currentDate = new Date();
        Date expTime = new Date(currentDate.getTime() + 1000 * 60 * 60 * 2);//JWT创建两小时后过期
        HashMap<String, Object> header = new HashMap<>();
        header.put("alg","HS256");//使用的加密算法HS256
        header.put("typ","JWT");//类型固定只能为JWT
        return JWT.create()
                .withHeader(header)//头

                //payload
                .withIssuedAt(currentDate)//创建时间
                .withExpiresAt(expTime)//过期时间
                .withClaim("userId",userId)//自定义数据

                //签名
                .sign(Algorithm.HMAC256(JWTSecret));//HMAC256和头中的HS256说的一个意思
    }
    public static boolean verifyToken(String jwt){

        try {
            //使用创建时JWT的算法和密钥创建一个解析对象
            JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(JWTSecret)).build();
            DecodedJWT decodedJWT  = jwtVerifier.verify(jwt);
            //decodeJWT后续可以获取头中、payload中的信息

            System.out.println("JWT验证正确");
            return true;
        } catch (Exception e) {
            System.out.println("JWT验证不正确");
            throw new RuntimeException(e);
        }
    }
}
